#pragma once

#include "fxcc/core/graph/common/pch.h"

namespace fxcc::graph::common
{
    struct Params :public fxcc::Base
	{
        std::map<std::string, float> m_Floats;

        std::map<std::string, glm::vec2> m_Vec2s;

        std::map<std::string, glm::vec3> m_Vec3s;

        std::map<std::string, glm::vec4> m_Vec4s;

        std::map<std::string, int> m_Ints;

        std::map<std::string, glm::ivec2> m_IVec2s;

        std::map<std::string, glm::ivec3> m_IVec3s;

        std::map<std::string, glm::ivec4> m_IVec4s;

        void AddFloat(const std::string& key, char* data, int dataLen);

        void InitFloat(const std::string& key, int vectorSize);

        void AddDouble(const std::string& key, char* data, int dataLen);

        void InitInt(const std::string& key, int vectorSize);

        void AddInt(const std::string& key, char* data, int dataLen);

        void SetFloat(const std::string& key, const float& v);

        void SetVec2(const std::string& key, const glm::vec2& v);

        void SetVec3(const std::string& key, const glm::vec3& v);

        void SetVec4(const std::string& key, const glm::vec4& v);

        void SetInt(const std::string& key, const int& v);

        void SetIVec2(const std::string& key, const glm::ivec2& v);

        void SetIVec3(const std::string& key, const glm::ivec3& v);

        void SetIVec4(const std::string& key, const glm::ivec4& v);

	};

};